https://leetcode.cn/problems/longest-common-subsequence/description/
//class Solution {
//public:
//    int longestCommonSubsequence(string text1, string text2)
//    {
//        int n = text1.size();
//        int m = text2.size();
//        text1 = ' ' + text1;
//        text2 = ' ' + text2;
//        vector<vector<int>> dp(n + 1, vector<int>(m + 1));
//        for (int i = 1; i <= n; i++)
//        {
//            for (int j = 1; j <= m; j++)
//            {
//                if (text1[i] == text2[j])
//                {
//                    dp[i][j] = dp[i - 1][j - 1] + 1;
//                }
//                else
//                {
//                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
//                }
//            }
//        }
//        return dp[n][m];
//    }
//};


https://leetcode.cn/problems/minimum-insertion-steps-to-make-a-string-palindrome/description/
//class Solution {
//public:
//    int minInsertions(string s)
//    {
//        int n = s.size();
//        vector<vector<int>> dp(n, vector<int>(n));
//        for (int i = n - 1; i >= 0; i--)
//        {
//            for (int j = i + 1; j < n; j++)
//            {
//                if (s[i] == s[j])
//                {
//                    dp[i][j] = dp[i + 1][j - 1];
//                }
//                else
//                {
//                    dp[i][j] = min(dp[i + 1][j], dp[i][j - 1]) + 1;
//                }
//
//            }
//        }
//        return dp[0][n - 1];
//    }
//};